home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games: 500 MB Amiga Software / 500 MB Amiga Software - Euber 130 - Amiga Games Disc & Mag.iso / spiele / publicdomain / uchess / uchesssrc.lha / nondsp.c < prev    next >
C/C++ Source or Header  |  1992-12-17  |  21KB  |  956 lines

  1. /*
  2.  * nondsp.c - UNIX & MSDOS NON-DISPLAY, AND CHESSTOOL interface for Chess
  3.  *
  4.  * Copyright (c) 1988,1989,1990 John Stanback
  5.  * Copyright (c) 1992 Free Software Foundation
  6.  *
  7.  * This file is part of GNU CHESS.
  8.  *
  9.  * GNU Chess is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2, or (at your option)
  12.  * any later version.
  13.  *
  14.  * GNU Chess is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with GNU Chess; see the file COPYING.  If not, write to
  21.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  */
  23.  
  24. #include <ctype.h>
  25. #include <signal.h>
  26.  
  27. #ifdef AMIGA
  28. #include <exec/types.h>
  29. #include <exec/exec.h>
  30. #include <proto/exec.h>
  31. #include <proto/dos.h>
  32. #include <proto/graphics.h>
  33. #include <proto/intuition.h>
  34. #endif
  35.  
  36. char HintString[80];
  37.  
  38. #define SIGQUIT SIGINT
  39.  
  40. #ifdef MSDOS
  41. #include <dos.h>
  42. #include <conio.h>
  43. #include <stdlib.h>
  44. #include <string.h>
  45. #include <time.h>
  46. #else
  47. #include <stdio.h>
  48. #include <dos.h>
  49. #include <stdlib.h>
  50. #include <string.h>
  51. #include <time.h>
  52. /*
  53. #include <sys/param.h>
  54. #include <sys/types.h>
  55. #include <sys/file.h>
  56. #include <sys/ioctl.h>
  57. */
  58. #endif
  59.  
  60. #include "gnuchess.h"
  61.  
  62. char IllegalString[40];
  63. extern int AmigaStarted;
  64. int IllegalMove=0;
  65. int Mate=0;
  66. int DrawnGame=0;
  67. char MateString[40]={0};
  68.  
  69. #ifdef DEBUG
  70. INTSIZE int debuglevel = 0;
  71.  
  72. #endif /* DEBUG */
  73. unsigned INTSIZE int MV[MAXDEPTH];
  74. int MSCORE;
  75.  
  76. #if defined CHESSTOOL || defined XBOARD
  77. INTSIZE int chesstool = 1;
  78.  
  79. #else
  80. INTSIZE int chesstool = 0;
  81.  
  82. #endif /* CHESSTOOL */
  83. extern char mvstr[4][6];
  84. int mycnt1, mycnt2;
  85. char *DRAW;
  86. extern char *InPtr;
  87. extern INTSIZE int pscore[];
  88.  
  89. void
  90. Initialize (void)
  91. {
  92.   mycnt1 = mycnt2 = 0;
  93. #if defined CHESSTOOL || defined XBOARD
  94. #ifndef SYSV
  95.   setlinebuf (stdout);
  96. #else
  97.   setvbuf (stdout, NULL, _IOLBF, BUFSIZ);
  98. #endif
  99.   printf (CP[43]);        /*Chess*/
  100.   if (!TCflag && (MaxResponseTime == 0))
  101.     MaxResponseTime = 15L*100L;
  102. #endif /* CHESSTOOL */
  103. }
  104.  
  105.  
  106. void DoAMove(void);
  107.  
  108. void DoAMove()
  109. {
  110.  char astr[40];
  111.  int r,c,l;
  112.  char piece;
  113.  
  114.       r = mvstr[0][3] - '1';
  115.       c = mvstr[0][2] - 'a';
  116.       l = ((flag.reverse) ? locn (7 - r, 7 - c) : locn (r, c));
  117.       if (color[l] == neutral)
  118.        {
  119.     DisplayBeep(0L);
  120.         Delay(25L);
  121.     DisplayBeep(0L);
  122.         Delay(25L);
  123.     DisplayBeep(0L);
  124.         Delay(25L);
  125.         piece = ' ';
  126.        }
  127.       else if (color[l] == white)
  128.         piece = qxx[board[l]]; /* white are lower case pieces */
  129.       else
  130.         piece = pxx[board[l]]; /* black are upper case pieces */
  131.   if (computer == black)
  132.    sprintf(astr,"%d: %s",GameCnt>>1,mvstr[0]);
  133.   else
  134.    sprintf(astr,"%d: %s",(GameCnt+1)>>1,mvstr[0]);   
  135.   DisplayComputerMove(astr);
  136.   AnimateAmigaMove(mvstr[0],piece);
  137. }
  138. void
  139. ExitChess (void)
  140. {
  141.   signal (SIGTERM, SIG_IGN);
  142.   ListGame (0L);
  143. #ifdef AMIGA
  144.   if (AmigaStarted)
  145.    AmigaShutDown();
  146. #endif
  147.   exit (0);
  148. }
  149.  
  150. #ifndef MSDOS            /* never called!!! */
  151. #ifndef AMIGA
  152. void
  153. Die (int sig)
  154. {
  155.   char s[80];
  156.  
  157.   ShowMessage (CP[31]);        /*Abort?*/
  158.   scanz ("%s", s);
  159.   if (strcmp (s, CP[210]) == 0)    /*yes*/
  160.     ExitChess ();
  161. }
  162. #endif
  163. #endif /* MSDOS */
  164.  
  165. void
  166. TerminateSearch (int sig)
  167. {
  168. #ifdef MSDOS
  169.   sig++;            /* shut up the compiler */
  170. #endif /* MSDOS */
  171.   if (!flag.timeout)
  172.     flag.musttimeout = true;
  173.   flag.bothsides = false;
  174. }
  175.  
  176.  
  177. void
  178. help (void)
  179. {
  180. #ifndef AMIGA
  181.   ClrScreen ();
  182.   /*printz ("CHESS command summary\n");*/
  183.   printz (CP[40]);
  184.   printz ("----------------------------------------------------------------\n");
  185.   /*printz ("g1f3      move from g1 to f3      quit      Exit Chess\n");*/
  186.   printz (CP[158]);
  187.   /*printz ("Nf3       move knight to f3       beep      turn %s\n", (flag.beep) ? "off" : "on");*/
  188.   printz (CP[86], (flag.beep) ? CP[92] : CP[93]);
  189.   /*printz ("a7a8q     promote pawn to queen\n");*/
  190.   printz (CP[128], (flag.material) ? CP[92] : CP[93]);
  191.   /*printz ("o-o       castle king side        easy      turn %s\n", (flag.easy) ? "off" : "on");*/
  192.   printz (CP[173], (flag.easy) ? CP[92] : CP[93]);
  193.   /*printz ("o-o-o     castle queen side       hash      turn %s\n", (flag.hash) ? "off" : "on");*/
  194.   printz (CP[174], (flag.hash) ? CP[92] : CP[93]);
  195.   /*printz ("bd        redraw board            reverse   board display\n");*/
  196.   printz (CP[130]);
  197.   /*printz ("list      game to chess.lst       book      turn %s used %d of %d\n", (Book) ? "off" : "on", bookcount, BOOKSIZE);*/
  198.   printz (CP[170], (Book) ? CP[92] : CP[93], bookcount, BOOKSIZE);
  199.   /*printz ("undo      undo last ply           remove    take back a move\n");*/
  200.   printz (CP[200]);
  201.   /*printz ("edit      edit board              force     enter game moves\n");*/
  202.   printz (CP[153]);
  203.   /*printz ("switch    sides with computer     both      computer match\n");*/
  204.   printz (CP[194]);
  205.   /*printz ("white     computer plays white    black     computer plays black\n");*/
  206.   printz (CP[202]);
  207.   /*printz ("depth     set search depth        clock     set time control\n");*/
  208.   printz (CP[149]);
  209.   /*printz ("post      principle variation     hint      suggest a move\n");*/
  210.   printz (CP[177]);
  211.   /*printz ("save      game to file            get       game from file\n");*/
  212.   printz (CP[188]);
  213.   /*printz ("random    randomize play          new       start new game\n");*/
  214.   printz (CP[181]);
  215.   printz ("----------------------------------------------------------------\n");
  216.   /*printz ("Computer: %-12s Opponent:            %s\n",*/
  217.   printz (CP[46],
  218.       ColorStr[computer], ColorStr[opponent]);
  219.   /*printz ("Depth:    %-12d Response time:       %d sec\n",*/
  220.   printz (CP[51],
  221.       MaxSearchDepth, MaxResponseTime/100);
  222.   /*printz ("Random:   %-12s Easy mode:           %s\n",*/
  223.   printz (CP[99],
  224.       (dither) ? CP[93] : CP[92], (flag.easy) ? CP[93] : CP[92]);
  225.   /*printz ("Beep:     %-12s Transposition file: %s\n",*/
  226.   printz (CP[36],
  227.       (flag.beep) ? CP[93] : CP[92], (flag.hash) ? CP[93] : CP[92]);
  228.   /*printz ("Time Control %s %d moves %d seconds %d opr %d depth\n", (TCflag) ? "ON" : "OFF",*/
  229.   printz (CP[110], (TCflag) ? CP[93] : CP[92],
  230.       TimeControl.moves[white], TimeControl.clock[white] / 100, OperatorTime, MaxSearchDepth);
  231.   signal (SIGINT, TerminateSearch);
  232. #ifndef MSDOS
  233.   signal (SIGQUIT, TerminateSearch);
  234. #endif /* MSDOS */
  235. #endif
  236. }
  237.  
  238. void
  239. EditBoard (void)
  240.  
  241. /*
  242.  * Set up a board position. Pieces are entered by typing the piece followed
  243.  * by the location. For example, Nf3 will place a knight on square f3.
  244.  */
  245.  
  246. {
  247.   INTSIZE a, r, c, sq, i, found;
  248.   int tmpcolor;
  249.   char s[80];
  250.  
  251.   flag.regularstart = false;
  252.   Book = 0;
  253. #ifndef AMIGA
  254.   /*printz (".   exit to main\n");*/
  255.   printz (CP[29]);
  256.   /*printz ("#   clear board\n");*/
  257.   printz (CP[28]);
  258.   /*printz ("c   change sides\n");*/
  259.   printz (CP[136]);
  260.   /*printz ("enter piece & location: \n");*/
  261.   printz (CP[155]);
  262. #else
  263.   if (!OpenAmigaEditWindow())
  264.    { /* open the window which will give us back text string */
  265.     DisplayBeep(0L);
  266.     Delay(25L);
  267.     DisplayBeep(0L);
  268.     return;
  269.    }
  270. #endif
  271.  
  272.   a = tmpcolor = white;
  273.   do
  274.     {
  275.       GetEditText(s,&tmpcolor); /* amiga routine to get the command from user */
  276.       found=0;
  277.       if (s[0] == CP[28][0])    /*#*/
  278.     for (sq = 0; sq < 64; sq++)
  279.       {
  280.         board[sq] = no_piece;
  281.         color[sq] = neutral;
  282.       }
  283.       if (a != tmpcolor)    /*c*/
  284.     a = otherside[a];
  285.       c = s[1] - 'a';
  286.       r = s[2] - '1';
  287.       if ((c >= 0) && (c < 8) && (r >= 0) && (r < 8))
  288.     {
  289.       sq = locn (r, c);
  290.       color[sq] = a;
  291.       board[sq] = no_piece;
  292.       for (i = no_piece; i <= king; i++)
  293.         if ((s[0] == pxx[i]) || (s[0] == qxx[i]))
  294.           {
  295.         board[sq] = i;
  296.         found=1;
  297.         break;
  298.           }
  299.       if ((found==0)||(board[sq] == no_piece)) color[sq] = neutral;    
  300.     }
  301.   } while (s[0] != CP[29][0]);
  302.   for (sq = 0; sq < 64; sq++)
  303.     Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0);
  304.   CloseAmigaEditWindow(); /* Closes the edit window */
  305.   GameCnt = 0;
  306.   Game50 = 1;
  307.   ZeroRPT ();
  308.   Sdepth = 0;
  309.   InitializeStats ();
  310.   DrawAmigaBoard();
  311. }
  312.  
  313. void
  314. SetupBoard (void)
  315.  
  316. /*
  317.  * Compatibility with Unix chess and the nchesstool. Set up a board position.
  318.  * Eight lines of eight characters are used to setup the board. a8-h8 is the
  319.  * first line. Black pieces are  represented  by  uppercase characters.
  320.  */
  321.  
  322. {
  323. #ifdef AMIGA
  324. return;
  325. #else
  326.   INTSIZE r, c, sq, i;
  327.   char ch;
  328.   char s[80];
  329.  
  330.   NewGame ();
  331.  
  332.   gets (s);            /* skip "setup" command */
  333.   for (r = 7; r >= 0; r--)
  334.     {
  335.       gets (s);
  336.       for (c = 0; c <= 7; c++)
  337.     {
  338.       ch = s[c];
  339.       sq = locn (r, c);
  340.       color[sq] = neutral;
  341.       board[sq] = no_piece;
  342.       for (i = no_piece; i <= king; i++)
  343.         if (ch == pxx[i])
  344.           {
  345.         color[sq] = black;
  346.         board[sq] = i;
  347.         break;
  348.           }
  349.         else if (ch == qxx[i])
  350.           {
  351.         color[sq] = white;
  352.         board[sq] = i;
  353.         break;
  354.           }
  355.     }
  356.     }
  357.   for (sq = 0; sq < 64; sq++)
  358.     Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0);
  359.   InitializeStats ();
  360.   ClrScreen ();
  361.   UpdateDisplay (0, 0, 1, 0);
  362.   /*printz ("Setup successful\n");*/
  363.   printz (CP[106]);
  364. #endif
  365. }
  366.  
  367.  
  368. void
  369. ShowDepth (char ch)
  370. {
  371. #ifdef MSDOS
  372.   ch++;                /* shut up the compiler */
  373. #endif /* MSDOS */
  374. }
  375.  
  376.  
  377. void
  378. ShowLine (INTSIZE unsigned int *bstline,char *astr)
  379. {
  380.  
  381.       algbr ((INTSIZE) (bstline[1] >> 8), (INTSIZE) (bstline[1] & 0xFF), false);
  382.       sprintf (astr,"%s", mvstr[0]);
  383. }
  384.  
  385. void
  386. ShowResults (INTSIZE int score, INTSIZE unsigned int *bstline, char ch)
  387. {
  388.  char astr[64];
  389.  char nstr[16];
  390.  
  391. #if !defined CHESSTOOL
  392.   if ((!flag.easy)&&(ThinkAheadDepth)&&(GameCnt > 1)&&(Sdepth > 2))
  393.    { /* check for lookahead abort */
  394.     if ((Sdepth > ThinkAheadDepth)&&(Sdepth >= GameList[GameCnt-2].depth))
  395.      {
  396.        flag.musttimeout = true;
  397.      }
  398.    }
  399.   if (flag.post)
  400.     {
  401.       ElapsedTime (2);
  402.       sprintf (astr,"D%d S%d ", Sdepth, score);
  403.       ShowLine (bstline,nstr);
  404.       strcat(astr,nstr);
  405.       ShowMessage(astr);
  406.     }
  407. #else
  408.   REG int i;
  409.  
  410.   MSCORE = score;
  411.   MV[30] = ch;
  412.   for (i = 1; bstline[i] > 0; i++)
  413.     {
  414.       MV[i] = bstline[i];
  415.     } MV[i] = 0;
  416. #endif /* CHESSTOOL */
  417. }
  418.  
  419. void
  420. SearchStartStuff (INTSIZE int side)
  421. {
  422.  char astr[64];
  423.   signal (SIGINT, TerminateSearch);
  424. #ifndef MSDOS
  425.   signal (SIGQUIT, TerminateSearch);
  426. #endif /* MSDOS */
  427. #if !defined CHESSTOOL
  428. /*#ifndef AMIGA*/
  429.   if (flag.post)
  430.     {
  431.       sprintf (astr,"Tgt:%d  ", ResponseTime);
  432.       ShowMessage(astr);
  433.     }
  434. /*#endif*/
  435. #endif /* CHESSTOOL */
  436. }
  437. void
  438. OutputMove (cstring)
  439. char *cstring;
  440. {
  441.  int r,c,l;
  442.  char astr[40];
  443.  char piece;
  444.  
  445. #ifdef DEBUG11
  446.   if (1)
  447.     {
  448.       FILE *D;
  449.       extern unsigned INTSIZE int PrVar[];
  450.       char d[80];
  451.       int r, c, l, i;
  452.       D = fopen ("/tmp/DEBUGA", "a+");
  453.       fprintf (D, "inout move is %s\n", mvstr[0]);
  454.       strcpy (d, mvstr[0]);
  455.       for (i = 1; PrVar[i] > 0; i++)
  456.     {
  457.       algbr ((INTSIZE) (PrVar[i] >> 8), (INTSIZE) (PrVar[i] & 0xFF), false);
  458.       fprintf (D, "%5s ", mvstr[0]);
  459.     }
  460.       fprintf (D, "\n");
  461.  
  462.       fprintf (D, "\n current board is\n");
  463.       for (r = 7; r >= 0; r--)
  464.     {
  465.       for (c = 0; c <= 7; c++)
  466.         {
  467.           l = locn (r, c);
  468.           if (color[l] == neutral)
  469.         fprintf (D, " -");
  470.           else if (color[l] == white)
  471.         fprintf (D, " %c", qxx[board[l]]);
  472.           else
  473.         fprintf (D, " %c", pxx[board[l]]);
  474.         }
  475.       fprintf (D, "\n");
  476.     }
  477.       fprintf (D, "\n");
  478.       fclose (D);
  479.       strcpy (mvstr[0], d);
  480.     }
  481. #endif
  482. if(flag.illegal){
  483.  IllegalMove = 1;
  484.  sprintf(IllegalString,"%s\n",CP[225]);
  485.  return;
  486. }
  487. if (mvstr[0][0] == '\0') goto nomove;
  488. #ifndef AMIGA
  489. #if defined CHESSTOOL
  490.   if (computer == black)
  491.     printz ("%d. ... %s\n", GameCnt, mvstr[0]);
  492.   else
  493.     printz ("%d. %s\n", ++mycnt1, mvstr[0]);
  494. #else
  495. #ifdef XBOARD
  496.   printz ("%d. ... %s\n", ++mycnt1, mvstr[0]);
  497. #else
  498.   printz ("%d. ... %s\n", ++mycnt1, mvstr[0]);
  499. #endif
  500. #endif /* CHESSTOOL */
  501. #endif /* amiga */
  502. #ifdef notdef
  503.   if (flag.post)
  504.     {
  505.       REG int i;
  506.  
  507.       printz (" %6d%c ", MSCORE, MV[30]);
  508.       for (i = 1; MV[i] > 0; i++)
  509.     {
  510.       algbr ((INTSIZE) (MV[i] >> 8), (INTSIZE) (MV[i] & 0xFF), false);
  511.       printz ("%5s ", mvstr[0]);
  512.     }
  513.     }
  514.   printz ("\n");
  515. #endif
  516. nomove:
  517.   if ((root->flags & draw)||(root->score == -9999)||
  518.       (root->score == 9998)) goto summary;
  519. #if !defined CHESSTOOL
  520.   if (flag.post)
  521.     {
  522.       INTSIZE h, l, t;
  523.  
  524.       h = TREE;
  525.       l = 0;
  526.       t = TREE >> 1;
  527.       while (l != t)
  528.     {
  529.       if (Tree[t].f || Tree[t].t)
  530.         l = t;
  531.       else
  532.         h = t;
  533.       t = (l + h) >> 1;
  534.     }
  535. #ifndef AMIGA
  536.       /*printf ("Nodes %ld Tree %d Eval %ld Rate %ld RS high %ld low %ld\n",*/
  537.       printf (CP[89],
  538.            NodeCnt, t, EvalNodes, (et) ? (NodeCnt / (et / 100)) : 0, reminus, replus);
  539.       /*printf ("Hin/Hout/Coll/Fin/Fout = %ld/%ld/%ld/%ld/%ld\n",*/
  540.       printf (CP[71],
  541.            HashAdd, HashCnt, THashCol, HashCol, FHashAdd, FHashCnt);
  542. #else /* print out thinking on amiga */
  543. #endif
  544.     }
  545.   UpdateDisplay (root->f, root->t, 0, root->flags);
  546. #ifndef AMIGA
  547.   /*printf ("My move is: %s\n", mvstr[0]);*/
  548.  
  549.   printz (CP[83], mvstr[0]);
  550. #else
  551.       r = mvstr[0][3] - '1';
  552.       c = mvstr[0][2] - 'a';
  553.       l = ((flag.reverse) ? locn (7 - r, 7 - c) : locn (r, c));
  554.       if (color[l] == neutral)
  555.        {
  556.     DisplayBeep(0L);
  557.         Delay(25L);
  558.     DisplayBeep(0L);
  559.         Delay(25L);
  560.     DisplayBeep(0L);
  561.         Delay(25L);
  562.         piece = ' ';
  563.        }
  564.       else if (color[l] == white)
  565.         piece = qxx[board[l]]; /* white are lower case pieces */
  566.       else
  567.         piece = pxx[board[l]]; /* black are upper case pieces */
  568.   if (computer == black)
  569.    sprintf(astr,"%d: %s",GameCnt>>1,mvstr[0]);
  570.   else
  571.    sprintf(astr,"%d: %s",(GameCnt+1)>>1,mvstr[0]);   
  572.   DisplayComputerMove(astr);
  573.   AnimateAmigaMove(mvstr[0],piece);
  574. #endif
  575.   if ((flag.beep)&&(!flag.bothsides))
  576.    {
  577.     DisplayBeep(0L);
  578.    }
  579. #endif /* CHESSTOOL */
  580.  summary:
  581.   if (root->flags & draw)
  582.     /*    printf ("Drawn game!\n");*/
  583.    {
  584.     /*printz (CP[57]);*/
  585.     DrawnGame = 1;
  586.    }
  587.   else if (root->score == -9999)
  588.    {
  589.     Mate = 1;
  590.     if (flag.bothsides)
  591.      sprintf(MateString,"%s mates!",ColorStr[opponent^1]);
  592.     else
  593.      sprintf(MateString,"%s mates!",ColorStr[opponent]);
  594. /*    printz("%s mates!\n",ColorStr[opponent]);*/
  595.    }
  596.   else if (root->score == 9998)
  597.    {
  598.     Mate = 1;
  599.     DoAMove();
  600.     if (flag.bothsides)
  601.      sprintf(MateString,"%s mates!",ColorStr[computer^1]);
  602.     else
  603.      sprintf(MateString,"%s mates!",ColorStr[computer]);
  604. /*    printz("%s mates!\n",ColorStr[computer]);*/
  605.    }
  606. #if !defined CHESSTOOL && !defined XBOARD
  607. #ifdef VERYBUGGY
  608.   else if (root->score < -9000)
  609.     printf("%s has a forced mate!\n",ColorStr[opponent]);
  610.   else if (root->score > 9000)
  611.     printf("%s has a forced mate!\n",ColorStr[computer]);
  612. #endif /*VERYBUGGY*/
  613. #endif /* CHESSTOOL */
  614. }
  615.  
  616. void
  617. ClrScreen (void)
  618. {
  619. #if !defined CHESSTOOL && !defined XBOARD && !defined AMIGA
  620.   printz ("\n");
  621. #endif
  622. #ifdef AMIGA
  623. #endif
  624. }
  625.  
  626. void
  627. UpdateDisplay (INTSIZE int f, INTSIZE int t, INTSIZE int redraw, INTSIZE int isspec)
  628. {
  629.  
  630. #ifndef AMIGA
  631.   INTSIZE r, c, l, m;
  632. #endif
  633.  
  634.   if (redraw && !chesstool)
  635.     {
  636. #ifndef AMIGA /* text clock and etc display */
  637.       printz ("\n");
  638.       r = TimeControl.clock[white] / 6000;
  639.       c = (TimeControl.clock[white] % 6000) / 100;
  640.       l = TimeControl.clock[black] / 6000;
  641.       m = (TimeControl.clock[black] % 6000) / 100;
  642.       /*printz ("White %d:%02d  Black %d:%02d\n", r, c, l, m);*/
  643.       printz (CP[116], r, c, l, m);
  644.       printz ("\n");
  645.       for (r = 7; r >= 0; r--)
  646.     {
  647.       for (c = 0; c <= 7; c++)
  648.         {
  649.           l = ((flag.reverse) ? locn (7 - r, 7 - c) : locn (r, c));
  650.           if (color[l] == neutral)
  651.         printz (" -");
  652.           else if (color[l] == white)
  653.         printz (" %c", qxx[board[l]]);
  654.           else
  655.         printz (" %c", pxx[board[l]]);
  656.         }
  657.       printz ("\n");
  658.     }
  659.       printz ("\n");
  660. #else /* Update intution board on the Amiga */
  661. #endif
  662.     }
  663. }
  664.  
  665. void
  666. skip ()
  667. {
  668.   while (*InPtr != ' ')
  669.     InPtr++;
  670.   while (*InPtr == ' ')
  671.     InPtr++;
  672. }
  673. void
  674. skipb ()
  675. {
  676.   while (*InPtr == ' ')
  677.     InPtr++;
  678. }
  679.  
  680. #ifndef AMIGA
  681. void
  682. ShowMessage (char *s)
  683. {
  684. #ifndef AMIGA
  685.   printf("%s\n", s);
  686. #else /* write this msg on the intuition msg screen */
  687.   DisplayComputerMove(s);
  688. #endif
  689. }
  690.  
  691. #endif
  692.  
  693. void
  694. ShowSidetoMove (void)
  695. {
  696. }
  697.  
  698. void
  699. PromptForMove (void)
  700. {
  701. #if !defined CHESSTOOL && !defined XBOARD && !defined AMIGA
  702.   /*printz ("\nYour move is? ");*/
  703.   printz (CP[124]);
  704. #endif /* CHESSTOOL */
  705. }
  706.  
  707.  
  708. void
  709. ShowCurrentMove (INTSIZE int pnt, INTSIZE int f, INTSIZE int t)
  710. {
  711. #ifdef MSDOS
  712.   f++;
  713.   t++;
  714.   pnt++;            /* shut up the compiler */
  715. #endif /* MSDOS */
  716. }
  717.  
  718. void
  719. ChangeAlphaWindow (void)
  720. {
  721. #ifndef AMIGA
  722.   printz ("WAwindow: ");
  723.   scanz ("%hd", &WAwindow);
  724.   printz ("BAwindow: ");
  725.   scanz ("%hd", &BAwindow);
  726. #endif
  727. }
  728.  
  729.  
  730. void
  731. ChangeBetaWindow (void)
  732. {
  733. #ifndef AMIGA
  734.   printz ("WBwindow: ");
  735.   scanz ("%hd", &WBwindow);
  736.   printz ("BBwindow: ");
  737.   scanz ("%hd", &BBwindow);
  738. #endif
  739. }
  740.  
  741. void
  742. GiveHint (void)
  743. {
  744.   if (hint)
  745.     {
  746.       algbr ((INTSIZE) (hint >> 8), (INTSIZE) (hint & 0xFF), false);
  747.       sprintf(HintString,CP[72], mvstr[0]);    /*hint*/
  748.     }
  749.   else
  750.     sprintf (HintString,CP[223]);
  751. #ifndef AMIGA
  752. printf(HintString);
  753. #else
  754. DisplayComputerMove(HintString);
  755. #endif
  756. }
  757.  
  758. void
  759. SelectLevel (timestring)
  760. char *timestring;
  761. {
  762.   int tmp;
  763.   char T[64], *p, *q;
  764.  
  765. #ifndef AMIGA
  766.   printz (CP[61]);
  767.   scanz ("%hd %s", &TCmoves, T);
  768. #else
  769. #ifndef LONGINTS2
  770.   sscanf(timestring,"%hd %s",&TCmoves,T);
  771. #else
  772.   sscanf(timestring,"%d %s",&TCmoves,T);
  773. #endif
  774. #endif
  775.   for (p = T; *p == ' '; p++) ;
  776.   TCminutes = strtol (p, &q, 10);
  777.   TCadd = 0;
  778.   if (TCminutes < 1)
  779.    TCminutes = 1;
  780.   if (TCmoves < 1)
  781.    TCmoves = 1;
  782.   if ((TCminutes/TCmoves) > 0)
  783.    {
  784.     EnableMoveNow();
  785.    }
  786.   else
  787.    {
  788.     DisableMoveNow();
  789.    }
  790.   if (*q == ':')
  791.     TCseconds = strtol (q + 1, (char **) NULL, 10);
  792.   else
  793.     TCseconds = 0;
  794. #ifdef OPERATORTIME
  795.   printz (CP[94]);
  796.   scanz ("%hd", &OperatorTime);
  797. #endif
  798.   if (TCmoves == 0) {
  799.     TCflag = false;
  800.     MaxResponseTime = TCminutes*60L*100L + TCseconds*100L;
  801.     TCminutes = TCseconds = 0;
  802.   } else {
  803.     TCflag = true;
  804.     MaxResponseTime = 0;
  805.   }
  806.   SetTimeControl ();
  807. #ifdef AMIGA
  808.   tmp = player;
  809.   player = white;
  810.   UpdateClocks();
  811.   player = black;
  812.   UpdateClocks();
  813.   player = tmp;
  814. #endif
  815. }
  816.  
  817. #ifdef DEBUG
  818. void
  819. ChangeDbLev (void)
  820. {
  821.   printz (CP[146]);
  822.   scanz ("%hd", &debuglevel);
  823. }
  824.  
  825. #endif /* DEBUG */
  826.  
  827. void
  828. ChangeSearchDepth (void)
  829. {
  830. #ifndef AMIGA
  831.   printz ("depth= ");
  832.   scanz ("%hd", &MaxSearchDepth);
  833.   TCflag = !(MaxSearchDepth > 0);
  834. #endif
  835. }
  836.  
  837. void ChangeHashDepth (void)
  838. {
  839. #ifndef AMIGA
  840.   printz ("hashdepth= ");
  841.   scanz ("%hd", &HashDepth);
  842.   printz ("MoveLimit= ");
  843.   scanz ("%hd", &HashMoveLimit);
  844. #endif
  845. }
  846.  
  847. void
  848. SetContempt (void)
  849. {
  850. #ifndef AMIGA
  851.   printz ("contempt= ");
  852.   scanz ("%hd", &contempt);
  853. #endif
  854. }
  855.  
  856. void
  857. ChangeXwindow (void)
  858. {
  859. #ifndef AMIGA
  860.   printz ("xwndw= ");
  861.   scanz ("%hd", &xwndw);
  862. #endif
  863. }
  864.  
  865. void
  866. ShowPostnValue (INTSIZE int sq)
  867.  
  868. /*
  869.  * must have called ExaminePosition() first
  870.  */
  871.  
  872. {
  873.   char astr[80];
  874.   INTSIZE score;
  875.  
  876.   score = ScorePosition (color[sq]);
  877.   if (color[sq] != neutral){
  878.     sprintf (astr,"%3d%c ", svalue[sq],(color[sq] == black)?'b':'w');}
  879.   else
  880.     sprintf(astr," *   ");
  881.   ShowMessage(astr);
  882. }
  883.  
  884. void
  885. DoDebug (void)
  886. {
  887. #ifndef AMIGA
  888.   INTSIZE c, p, sq, tp, tc, tsq, score,j,k;
  889.   char s[40];
  890.  
  891.   ExaminePosition ();
  892.   ShowMessage (CP[65]);
  893.   scanz ("%s", s);
  894.   c = neutral;
  895.   if (s[0] == CP[9][0] || s[0] == CP[9][1])     /* w W*/ c = white;
  896.   if (s[0] == CP[9][2] || s[0] == CP[9][3])     /*b B*/ c = black;
  897.   for (p = king; p > no_piece; p--)
  898.     if ((s[1] == pxx[p]) || (s[1] == qxx[p])) break;
  899.   if(p > no_piece)
  900.   for(j=7;j>=0;j--){
  901.   for(k=0;k<8;k++){
  902.       sq=j*8+k;
  903.       tp = board[sq];
  904.       tc = color[sq];
  905.       board[sq] = p;
  906.       color[sq] = c;
  907.       tsq = PieceList[c][1];
  908.       PieceList[c][1] = sq;
  909.       ShowPostnValue (sq);
  910.       PieceList[c][1] = tsq;
  911.       board[sq] = tp;
  912.       color[sq] = tc;
  913.     }
  914.       printz("\n");
  915.     }
  916.   score = ScorePosition (opponent);
  917.   printz (CP[103], score, mtl[computer], pscore[computer], mtl[opponent],pscore[opponent]);
  918. #endif
  919. }
  920.  
  921. void
  922. DoTable (INTSIZE table[64])
  923. {
  924.   char astr[16];
  925.   INTSIZE  sq,j,k;
  926.   ExaminePosition ();
  927.   for(j=7;j>=0;j--){
  928.   for(k=0;k<8;k++){
  929.     sq=j*8+k;
  930.     sprintf (astr,"%3d ", table[sq]);
  931.     ShowMessage(astr);
  932.   }
  933. }
  934. }
  935.  
  936. void
  937. ShowPostnValues (void)
  938. {
  939.   INTSIZE sq, score,j,k;
  940.   char astr[64];
  941.  
  942.   ExaminePosition ();
  943.   for(j=7;j>=0;j--){
  944.   for(k=0;k<8;k++){
  945.   sq=j*8+k;
  946.     ShowPostnValue (sq);
  947.   }
  948.   }
  949.   score = ScorePosition (opponent);
  950.  sprintf (astr,CP[103], score, mtl[computer], pscore[computer], mtl[opponent],pscore[opponent]);
  951.  ShowMessage(astr);
  952.  sprintf(astr,"hung white %d hung black %d\n",hung[white],hung[black]);
  953.  ShowMessage(astr);
  954. }
  955.  
  956.